package monpkg.rmi;


import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.Unreferenced;
import java.util.Date;

import monpkg.entities.Address;
import monpkg.entities.Student;

/**
 * @author Yannick Bouchot
 * @author Jonathan Romero
 */

public class FStudentImpl extends UnicastRemoteObject implements IStudentImpl, Unreferenced, Remote {

	private static final long serialVersionUID = 1L;
	private int counter = 0;
	private Student s;

	FStudentImpl() throws RemoteException {
		super();
	}

	@Override
	public void unreferenced() {
		counter--;
	}

	/**
	 * creer un nouvel etudiant vide, augmente le compteur et renvoie l'etudiant
	 */
	@Override
	public Student newStudent() throws RemoteException {
		counter++;
		return new Student();
	}

	/**
	 * creer un nouvel etudiant avec tout les parametres, augmente le compteur
	 * et renvoie l'etudiant
	 */
	@Override
	public Student newStudent(String firstName, String name, String mail,
			String password) throws RemoteException {
		counter++;
		return new Student(firstName, name, mail, password);
	}

	/**
	 * methode retournant le compteur qui est le nombre d'etudiants
	 */
	@Override
	public int studentCounter() throws RemoteException {
		return counter;
	}
	
	/**
	 * methode permettant de recuperer l'adresse de l'etudiant
	 */
	@Override
	public Address getAddress() throws RemoteException {
		return s.getAddress();
	}

	/**
	 * methode permettant d'etablir l'adresse de l'etudiant
	 */
	@Override
	public void setAddress(Address address) throws RemoteException {
		s.setAddress(address);
	}

	/**
	 * methode permettant de recupere l'id de l'etudiant
	 */
	@Override
	public long getId() throws RemoteException {
		return s.getId();
	}

	/**
	 * methode permettant de definir l'id de l'etudiant
	 */
	@Override
	public void setId(long id) throws RemoteException {
		s.setId(id);
	}

	/**
	 * methode permettant de recuperer le prenom de l'etudiant
	 */
	@Override
	public String getFirstName() throws RemoteException {
		return s.getFirstName();
	}

	/**
	 * methode permettant de definir le prenom de l'etudiant
	 */
	@Override
	public void setFirstName(String firstName) throws RemoteException {
		s.setFirstName(firstName);
	}

	/**
	 * methode permettant de recuperer le nom de l'etudiant
	 */
	@Override
	public String getName() throws RemoteException {
		return s.getName();
	}

	/**
	 * methode permettant de definir le nom de l'etudiant
	 */
	@Override
	public void setName(String name) throws RemoteException {
		s.setName(name);
	}

	/**
	 * methode permettant de recuperer le mot de passe de l'etudiant
	 */
	@Override
	public String getPassword() throws RemoteException {
		return s.getPassword();
	}

	/**
	 * methode permettant de definir le mot de passe de l'etudiant
	 */
	@Override
	public void setPassword(String password) throws RemoteException {
		s.setPassword(password);
	}

	/**
	 * methode permettant de recuperer le mail de l'etudiant
	 */
	@Override
	public String getMail() throws RemoteException {
		return s.getMail();
	}

	/**
	 * methode permettant de definir le mail de l'etudiant
	 */
	@Override
	public void setMail(String mail) throws RemoteException {
		s.setMail(mail);
	}

	/**
	 * methode permettant de recuperer le site web de l'etudiant
	 */
	@Override
	public String getWebSite() throws RemoteException {
		return s.getWebSite();
	}

	/**
	 * methode permettant de definir le site web de l'etudiant
	 */
	@Override
	public void setWebSite(String webSite) throws RemoteException {
		s.setWebSite(webSite);
	}

	/**
	 * methode permettant de recuperer le nom de la compagnie ayant embauche
	 * l'etudiant
	 */
	@Override
	public String getCompanyName() throws RemoteException {
		return s.getCompanyName();
	}

	/**
	 * methode permettant de definir le nom de la compagnie ayant embauche
	 * l'etudiant
	 */
	@Override
	public void setCompanyName(String companyName) throws RemoteException {
		s.setCompanyName(companyName);
	}

	/**
	 * methode permettant de recuperer le site web de la compagnie ayant
	 * embauche l'etudiant
	 */
	@Override
	public String getCompanySiteWeb() throws RemoteException {
		return s.getCompanySiteWeb();
	}

	/**
	 * methode permettant de definir le site web de la compagnie ayant embauche
	 * l'etudiant
	 */
	@Override
	public void setCompanySiteWeb(String companySiteWeb) throws RemoteException {
		s.setCompanySiteWeb(companySiteWeb);
	}

	/**
	 * methode permettant de recuperer la date d'anniversaire de l'etudiant
	 */
	@Override
	public Date getBirthDay() throws RemoteException {
		return s.getBirthDay();
	}

	/**
	 * methode permettant de definir la date d'anniversaire de l'etudiant
	 */
	@Override
	public void setBirthDay(Date birthDay) throws RemoteException {
		s.setBirthDay(birthDay);
	}
}
